1. Field of the Invention
The present invention relates to the generation of unique bus device identifiers and, more particularly, to the generation of unique bus device identifiers on a Small Computer System Interface (“SCSI”) bus and other technologies using the SCSI command sets.
2. Description of the Related Art
Most types of electronic and computing systems comprise many different devices that electronically communicate with each other over one or more buses. Exemplary types of devices include, but are not limited to, processors (e.g., microprocessors, digital signal processors, and micro-controllers), memory devices (e.g., hard disk drives, floppy disk drives, and optical disk drives), and peripheral devices (e.g., keyboards, monitors, mice). When electrically connected to a bus, these types of devices, as well as others not listed, are all sometimes generically referred to as “bus devices.”
A bus, in the conceptually simplest form, is a collection of wires over which the various electronic devices in a piece of electronic or computing equipment transmit information. However, any given bus may be implemented in many different ways. A bus may be implemented so as to transmit only data, or only commands, or both data and commands, for instance. But many more permutations are available based on other operating characteristics, such as bus width and bus speed. These two characteristics are exemplary only, and many other characteristics not listed are considered in designing any particular bus implementation. Occasionally, an industry group will formalize a set of operating characteristics into a “standard.” The standard will set flexible definitions for the standard that permit some variation in design but generally ensure compatibility for designs meeting the standard.
One such bus standard is the Small Computer System Interface (“SCSI”, pronounced “scuzzy”). There are actually many different kinds of SCSI, each defined by a different SCSI standard. More particularly, at least the following varieties of SCSI are currently implemented: SCSI-1, SCSI-2, Wide SCSI, Fast SCSI, Fast Wide SCSI, Ultra SCSI, SCSI-3, Ultra Wide SCSI, Ultra2 SCSI, Fibre Channel, and Wide Ultra2 SCSI as well as some buses utilizing optical interconnections. Thus, in actuality, there are several SCSI standards and they are not necessarily compatible with each other, although the basic SCSI standards (SCSI-1, SCSI-2, and SCSI-3) are basically functionally compatible. On the other hand, one problem with these standards is that it is hard in many cases to draw the line between them.
Generally, SCSI began as a parallel interface standard used by Apple Macintosh computers, PCs, and many UNIX systems for attaching peripheral devices to computers. The original intent was to develop an interface providing faster data transmission rates (up to 80 megabytes per second) than the standard serial and parallel ports found on computers of the time. However, the SCSI standards proved to be enormously more useful than this original intent. One distinct advantage to the SCSI interface was that it permitted a user to attach many devices to a single SCSI port. Then conventional serial and parallel ports generally were limited to one device per port. SCSI consequently presented numerous advantages, and, not surprisingly many of these greatly facilitated the attachment of peripheral devices for input/output (“I/O”) purposes. So, SCSI really was an I/O bus rather than simply an interface.
The various SCSI standards showed still more versatility and have been adapted to large scale computing environments, including networks, both local area networks (“LANs”) and wide area networks (“WANs”). One large scale computing application is the implementation of redundant arrays of inexpensive disks (“RAIDs”), which uses multiple arrays of multiple disks to improve performance and enhance reliability. A RAID is essentially a large storage device, and is typically networked to a server or other computer. In this circumstance, both the RAID and the network may both be implemented using SCSI buses, although this is certainly not required.
One thing virtually all SCSI buses have in common, though, is the need to uniquely identify individual SCSI devices in a given implementation. In order for any information to be transmitted to a bus device, it must be uniquely identified in some way to ensure the data is not transmitted to the wrong bus device. Furthermore, in many implementations, certain system resources must be allocated to each bus device, depending upon the make and model of the device. Each bus device should then be uniquely identified in order to control its access to system resources to ensure proper resource allocation and utilization.
Still further, a single system needs to identify the device to recognize when it has multiple paths by which to access the device. The “bus” may include a number of subsidiary buses interconnected by adapters, bridges, and/or port interfaces. Thus, systems need to identify individual instances of multiple devices of the same make or model, which may be cross connected through multiple adapters or via multi-port interfaces. Furthermore, information may sometimes reach its destination over the bus through any one of several paths through the bus. Multiple systems therefore also need to be able to uniquely identify the device so that they may uniformly present the device and coordinate access to the device. Systems desire to make administrative functions to configure, maintain, and service the systems as automatically and transparently as possible to the human operator. Unique device identification allows software subsystems to perform these functions in the manner desired.
Unique identification of SCSI devices has been difficult due to the lack of or poor specification of basic mechanisms for this purpose in the standards. Where mechanisms exist, they offer multiple sets of data, each with differing properties of uniqueness. Some mechanisms are poorly described and allow for multiple interpretations of what the data means. Different revisions of the standards may call out different mechanisms and, in nearly all cases, some or all of the mechanisms are optional for compliance to the standard. Device implementations have complicated this as some vendors have implemented vendor-specific mechanisms, improperly implemented the mechanisms described in the standards, returned erroneous data in response to the mechanisms, or have not provided robust implementations that properly reject unrecognized commands. Some devices return different data depending upon whether media is present or not, what type of media is present, or whether the device has been placed into a ready state or not.
Device identification has typically been based on the physical location of the device. A unique identifier (“UID”) in this scheme is typically composed of the adapter that connects to the device, as well as the physical address on the SCSI bus to which the device responds. This physical location is typically specific to a particular system. Hardware implementations have attempted to pre-set the physical address for the device.
A UID based on the device's physical address is problematic, as users may physically move devices, and as several SCSI interconnects allow the physical device address to change due to insertion or removal of other devices or under reset conditions. These changes may occur while a system is using the device or while the system is non-operational. Many unique identification mechanisms have wanted to modify the device's media or non-volatile hardware (if they exist). Many SCSI devices do not allow such implementations. Thus, this scheme tends to be static, and inhibits dynamic configuration (or, reconfiguration) of the system implementing the SCSI bus. Custom hardware has been developed to create vendor-specific components that can be queried by software to determine which components are co-connected, allowing for a rudimentary form of recognition to be performed. Still other identification schemes dictate a specific standards implementation or level of specification, or is only applicable to particular device types.
The present invention is directed to resolving one or all of the problems mentioned above.